let numbers: [Int] = [1, 2, 3]
let mixed: [Any] = [1, "hello", true, 3.14]
print(numbers)
print(mixed)

// 数组字面量
let fruits = ["Apple", "Banana", "Orange"]

// 显示类型声明
var scores: [Int] = [90, 85, 88]
var names: [String] = ["Alice", "Bob", "Charlie"]
var names1: [String] = ["Alice", "Bob", "Charlie"]

// 创建空数组
var emptyArray: [Int] = []
var emptyArray1 = [Int]()
var emptyArray2 = [Int]()

// 使用重复值初始化
let defaults = Array(repeating: false, count: 3)
print(defaults)

// 使用序列初始化
let rangeArray = Array(1...5)
print(rangeArray)

// 访问数组
let animals = ["Dog", "Cat", "Bird"]
print(animals[0])  // 访问第一个元素
print(animals[1])  // 访问第二个元素

// 安全访问
if let first = animals.first {
    print("第一个元素是：\(first)")
} else {
    print("数组为空")
}

if animals.indices.contains(2) {
    print(animals[2])
}

// 修改元素 直接通过下标修改
var numbers1 = [1, 2, 3]
numbers1[0] = 10
print(numbers1)  // 输出: [10, 2, 3]

// 添加元素
// append(_:): 在数组末尾添加单个元素，时间复杂度为O(1)（均摊）。
numbers1.append(4)

// append(contentsOf:) 添加一个序列（如另一个数组）的所有元素。
numbers1.append(contentsOf: [6, 7, 8])
print("numbers1: \(numbers1)")  // 输出: numbers1: [10, 2, 3, 4, 6, 7, 8]

// insert(_:at:) 在指定位置插入元素，时间复杂度为O(n)。
numbers1.insert(5, at: 2)
print("numbers1: \(numbers1)")  // 输出: numbers1: [10, 2, 5, 3, 4, 6, 7, 8]

// 删除元素
// remove(at:) 删除指定位置的元素，时间复杂度为O(n)。
numbers1.remove(at: 0)
print("numbers1: \(numbers1)")  // 输出: numbers1: [2, 5, 3, 4, 6, 7, 8]

// removeLast() 删除最后一个元素，时间复杂度为O(1)。
numbers1.removeLast()
print("numbers1: \(numbers1)")  // 输出: numbers1: [2, 5, 3, 4, 6, 7]
// removeAll() 删除所有元素，时间复杂度为O(n)。
numbers1.removeAll()
print("numbers1: \(numbers1)")  // 输出: numbers1: []

// 替换子范围
// 使用`replaceSubrange(_:with:)`替换指定范围的元素。
var numbers2 = [1, 2, 3, 4, 5]
numbers2.replaceSubrange(1...3, with: [6, 7, 8])
print("numbers2: \(numbers2)")  // 输出: numbers2: [1, 6, 7, 5]

// 数组的属性
// count: 返回元素数量。
print(numbers2.count)  // 输出: 5
// isEmpty: 判断数组是否为空。
print(numbers2.isEmpty)  // 输出: false
// first: 返回第一个元素。
print(numbers2.first!)  // 输出: Optional(1)
// last: 返回最后一个元素。
print(numbers2.last!)  // 输出: Optional(5)

// capacity: 返回数组的内存容量（可能大于`count`，因为数组会预分配空间）
print(numbers2.capacity)  // 输出: 8
